package cn.sytton.taffecloud.service.file.service;

import cn.sytton.taffecloud.service.file.constants.FileBucket;
import cn.sytton.taffecloud.common.model.file.FileEntity;
import cn.sytton.taffecloud.common.model.file.FileGroupEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.List;

/**
 * 公共文件服务接口
 *
 * @author skyrock
 */
public interface IFileService {

    /**
     * 上传文件
     * @param file 文件
     * @param bucket 桶
     * @return 文件实体
     */
    FileEntity upload(MultipartFile file, FileBucket bucket);

    /**
     * 上传文件
     * @param file 文件
     * @param bucket 桶
     * @return 文件实体
     */
    FileEntity upload(File file, FileBucket bucket);

    /**
     * 上传文件并保存文件关系信息
     * @param file 文件
     * @param bucket 桶
     * @return 文件实体
     */
    FileEntity uploadAndSave(MultipartFile file, FileBucket bucket);

    /**
     * 上传多个文件并保存文件关系信息
     * @param files file
     * @param bucket 桶
     * @return 文件组实体
     */
    FileGroupEntity uploadAndSave(List<MultipartFile> files, FileBucket bucket);

    /**
     * 下载文件
     * @param fileId 文件ID
     */
    void download(String fileId);

    /**
     * 下载文件组压缩包
     * @param groupId 文件组ID
     * @param name 压缩包名称
     */
    void downloadGroup(String groupId, String name);

    /**
     * 下载文件
     * @param objectName 对象名
     * @param bucket 桶
     */
    void downloadObject(String objectName, FileBucket bucket);

    /**
     * 获取永久文件访问链接，(如果bucketName是private的，永久链接无法访问)
     * @param fileId 文件ID
     * @return 访问链接
     */
    String getPublicUrl(String fileId);

    /**
     * 获取资源临时访问链接, 默认24小时过期
     * @param fileId 文件ID
     * @return 访问链接
     */
    String getUrl(String fileId);

    /**
     * 获取资源临时访问链接
     * @param fileId 文件ID
     * @param expiryMinute 有效期单位分钟
     * @return 访问链接
     */
    String getUrl(String fileId, long expiryMinute);
}
